package autotest_mock

import (
	app_global "app/app_src/framework/app/global"
	"app/app_src/framework/ioc"

	"github.com/gin-gonic/gin"

	app_util "app/app_src/framework/app/util"
	app_constants "app/app_src/framework/constant/app"
	gin_app "app/app_src/framework/gin/util"
	file_util "app/app_src/framework/util/file"
	modules "app/app_src/modules"
)

const _DEFAULT_TEST_CONFIG_PATH = "resources/unittest/config.ini"
const _DEFAULT_TEST_HTTP_PORT = "8080"

func MockGin(appDir string) *gin.Engine {
	// 设置应用路径
	app_global.InitGlobal(appDir, "")
	// 获取配置
	config := app_util.GetConfigByArgs()
	// 设置加密盐值
	app_global.SetSecretSalt(config.SecretSalt)

	// 注册依赖
	builder := ioc.NewBuilder()
	modules.InjectDependencies(builder)
	ioc.InitGlobalContainer(builder.Build())

	var args app_util.Args
	args.Env = app_constants.ENV_AUTOTEST
	args.Config = file_util.JoinPath(appDir, _DEFAULT_TEST_CONFIG_PATH)
	// 模拟启动参数
	app_util.SetArgs(&args)

	// 设置成单元测试模式
	gin_app.SetUnitTestMode(true)
	// 获取 gin 引擎
	engine := gin_app.GetEngine()
	router := engine.Group(app_global.ContextPath())
	// 注册各个模块的路由
	modules.RegisterRoutes(router)
	// 运行应用
	gin_app.RunApp(engine, _DEFAULT_TEST_HTTP_PORT)

	return engine
}
